/*
  操作文件模块
*/
var fs = require('fs');
var path = require('path');
// 获取参数
var args = process.argv.splice(2);
/* 
  定义文件移动到哪个目录
  htmlPath: html 目录
  jsPath:   js 目录
  cssPath:  css 目录
*/
var htmlPath = './dist/final/';
var jsPath = './dist/final/';
var cssPath = './dist/final/';
// 需要使用的语言路径
// 英文 en.json
var languagePath = 'https://s3-ap-southeast-1.amazonaws.com/mod-mmsc-global-ph-dev/static/';
if(args.indexOf('zh')){
  // 中文版 zh.json
  languagePath = 'https://s3.cn-north-1.amazonaws.com.cn/mod-test-bucket/MedicalOnDemand/';
}

// 定义个盛放文件的数组
var fileList=[];

// 遍历指定文件夹中所有文件的方法
function walks(path){
  var dirList = fs.readdirSync(path);
  dirList.forEach(function(item){
    if(fs.statSync(path + '/' + item).isFile()){
      fileList.push(path + '/' + item);
    }
  });
}

// 初始状态
console.log('正在处理,请稍后...');
function ergodic(){
  // 创建不存在目录
  mkdirsSync(htmlPath);
  mkdirsSync(jsPath);
  mkdirsSync(cssPath);
  // 清空目标路径 js/css 文件夹 避免过多无用文件占用内存
  emptyDir(jsPath);
  emptyDir(cssPath);
  fileList=[];
  walks('./dist');
  for(var i=0;i<fileList.length;i++){
    // 拿到文件名
    let _index = fileList[i].lastIndexOf('/');
    let fileName = fileList[i].substring(_index+1, fileList[i].length);
    // 获得需要操作的 html 文件
    if(fileList[i].indexOf('index.html')!=-1){
      ergodic2(fileList[i], fileName);
      continue;
    }
    // 获得需要操作的 js 文件
    if(fileList[i].indexOf('main.')!=-1&&fileList[i].indexOf('bundle.js')!=-1){
      ergodic3(fileList[i], fileName);
      continue;
    }
    // 如果不是要处理的文件，直接移动到指定目录
    if(fileList[i].indexOf('bundle.js')!=-1){
      copy(fileList[i], jsPath+fileName);
      continue;
    }
    if(fileList[i].indexOf('bundle.css')!=-1){
      copy(fileList[i], cssPath+fileName);
      continue;
    }
  }
}
// 处理 index.html 文件
function ergodic2(indexHtmlFile, fileName){
  if(indexHtmlFile){
    let opath = indexHtmlFile;
    // 读取文件  路径/编码 注：这里读写文件使用同步
    let data = fs.readFileSync(opath, 'utf-8');
    if(data.indexOf('{% load static %}') != -1){
      console.log('index.html 已经处理过了！');
      return;
    }
    // 获得需要替换的 msl 信息
    let result = data.substring(data.indexOf('mslData=')+9, data.indexOf('3923b"}')+7);
    // 开始替换
    let dataText = data.replace(`<head>`, `<head>{% load static %}`)
                       .replace(`<base href="/">`, `<base href="/MedicalOnDemand/WebPortal/Console/">`)
                       .replace(`<link href="`, `<link href="{% static 'MedicalOnDemand/css/`)
                       .replace(`" rel="stylesheet"`, `' %}" rel="stylesheet"`)
                       .replace(/\"text\/javascript\"\ssrc=\"/g, `"text/javascript" src="{% static 'MedicalOnDemand/js/`)
                       .replace(/\"><\/script>/g, `' %}"></script>`)
                       .replace(result, `{"msl_id": "{{ msl_id }}", "msl_mudid": "{{ msl_mudid }}", "msl_name": "{{ msl_name }}", "msl_type": "{{ msl_type }}", "msl_ta_code": "{{ msl_ta_code }}", "msl_ta_name": "{{ msl_ta_name }}", "msl_webex_url": "{{ msl_webex_url }}"}`);
    // 将修改后的文件写入源文件
    fs.writeFileSync(opath, dataText, 'utf-8');
    copy(opath, htmlPath+fileName);
    // 完成
    console.log('恭喜，index.html 修改完成！！！');
  }else{
    console.log('没有找到需要操作的 index.html 文件 文件！');
  }
}
// 处理 main.html 文件
function ergodic3(mainJsFile, fileName){
  if(mainJsFile){
    let opath = mainJsFile;
    // 读取文件  路径/编码 注：这里读写文件使用同步
    let data = fs.readFileSync(opath,'utf-8');
    if(data.indexOf('./assets/i18n/') != -1){
      // 获得 ./assets/i18n/ 并替换成 需要替换的 语言 json 路径
      let dataText=data.replace('./assets/i18n/', languagePath);
      // 将修改后的文件写入源文件
      fs.writeFileSync(opath, dataText, 'utf-8');
      copy(opath, jsPath+fileName);
      // 完成
      console.log('恭喜，main.js 修改完成！！！');
    }else{
      console.log('main.js 已经处理过了！');
      copy(opath, jsPath+fileName);
      return;
    }
  }else{
    console.log('没有找到需要操作的 main.js 文件 文件！');
  }
}
// 健壮性考虑，可以支持创建多级目录
function mkdirsSync(dirname) {
  if (!fs.existsSync(dirname)) {
    if (mkdirsSync(path.dirname(dirname))) {
      fs.mkdirSync(dirname);
      return true;
    }
  } else {
    return true;
  }
}
// 清除原有的打包文件
function emptyDir(fileUrl){
  var files = fs.readdirSync(fileUrl);//读取该文件夹
  files.forEach(function(file){
      var stats = fs.statSync(fileUrl+'/'+file);
      if(file.indexOf('.bundle.')!=-1){
        fs.unlinkSync(fileUrl+'/'+file);
        console.log("删除文件"+fileUrl+'/'+file+"成功");
      }
  });
}
// 将指定文件放到指定目录
function copy(src, dst) {
  fs.writeFileSync(dst, fs.readFileSync(src));
}

// 开始处理 start
ergodic();


/*
  优点：
    一次运行，全部搞定。

  mac版本使用文档：
    1，找到 run.command 的路径：
        /Users/gaozhe/source/ModWebPortalJs/run.command（例如）
    2，在终端输入：
        chmod 777 /Users/gaozhe/source/ModWebPortalJs/run.command
    3，修改 
        run.command 
        cd source/ModWebPortalJs （例如）
    4，放好需要做的文件后，将可以用两种种方式运行
      (0),.command 操作：双击 run.command 即可。（推荐）
      (1),打开终端，输入 run.command 中命令,即
          cd source/ModWebPortalJs
          ng build --prod --aot
          node run
    5，若出错误，请仔细参考前 3 条。
    6，关闭终端即可

  编辑于2017/11/11

*/